home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / Caml Light 0.7 / Caml Light 0.7 source / src / runtime / unalignd.h < prev   
Text File  |  1995-06-01  |  919b  |  32 lines

  1. /* To read 16 bit and 32 bit words when they are not aligned */
  2.  
  3. #ifndef _unaligned_
  4. #define _unaligned_
  5.  
  6.  
  7. #ifdef ALIGNMENT
  8.  
  9. #define s16(p) (int) ((((schar *) (p))[1] << 8) + ((unsigned char *) (p))[0])
  10. #define u16(p) (unsigned int) ((((unsigned char *) (p))[1] << 8) \
  11.                + ((unsigned char *) (p))[0])
  12. #define s32(p) (int32) ((((schar *) (p))[3] << 24) \
  13.                + (((unsigned char *) (p))[2] << 16) \
  14.                + (((unsigned char *) (p))[1] << 8) \
  15.                + ((unsigned char *) (p))[0])
  16. #define u32(p) (uint32) ((((unsigned char *) (p))[3] << 24) \
  17.                + (((unsigned char *) (p))[2] << 16) \
  18.                + (((unsigned char *) (p))[1] << 8) \
  19.                + ((unsigned char *) (p))[0])
  20.  
  21. #else
  22.  
  23. #define s16(p) (* (short *) (p))
  24. #define u16(p) (* (unsigned short *) (p))
  25. #define s32(p) (* (int32 *) (p))
  26. #define u32(p) (* (uint32 *) (p))
  27.  
  28. #endif
  29.  
  30.  
  31. #endif /* _unaligned_ */
  32.